草庐IT

Android PlusOneButton 不初始化

全部标签

【C++】const、static关键字和构造函数初始化

💗个人主页💗⭐个人专栏——C++学习⭐💫点击关注🤩一起学习C语言💯💫目录1.const修饰成员函数1.1语法格式1.2权限放大缩小1.3思考1.4解答2.再谈构造函数2.1构造函数体赋值2.2初始化列表2.3explicit关键字3.static成员3.1静态变量3.2静态函数3.3 静态成员变量1.const修饰成员函数将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。1.1语法格式在成员函数的声明中使用const关键字的语法格式为:返回类型函数名()const;在成员函数的定

c++ - 当类没有 constexpr 构造函数时简化冗余 std::array 初始化

我有以下代码的更复杂版本:#include#includeusingnamespacestd;classDummy{public:Dummy(constdoublea,constdoublef){//Somecomplexcalculations}};constexprdoublevalues[]{0.1,0.2,0.3,0.4};constexprautoN=sizeof(values)/sizeof(values[0]);staticconstarraydummies{Dummy(10*values[0],M_PI*0),Dummy(10*values[1],M_PI*1),Dum

c++ - 如何从成对的初始化列表构造对象?

在这段代码中,我尝试使用pair(int,pair(string,string))的initializer_list来初始化类对象,但是在初始化map(int,pair(string,string)类型的类成员map2时出现错误).这是我的代码#include#include#include#includeusingnamespacestd;classcontact{private:map>map2;public:contact(initializer_list>>m):map2(m){}voiddisplay(){for(constauto&it:map2){cout

c++ - 如何避免为聚合初始化重新输入类型信息?

我有以下示例:#includestructA{constchar*str;constchar*str2;};templatestructAs{std::arrayelems_;};templateAs(Args...)->As;//Linktonon-workingexample虽然此代码有效,但我想避免在聚合列表中“重新输入”A,但如果我将其遗漏,推导指南将失败:“cannot推导出'As'"的模板参数(我想这是有道理的)。也许解决这个问题的一种方法是手写我需要的任何数量的推导指南,从那时起我可以在每个推导指南中编写A类型(即:我需要的每个尺寸一个推导容器)。

c++ - Visual Studio 2017 允许在构造函数中使用自身初始化引用成员。它真的是合法的 C++ 吗?

我刚刚在我的代码中发现了一个非常危险的错误,我觉得它应该被编译器捕获。我错了吗?本质上,允许类的引用成员在构造函数中自行初始化。下面是在VisualStudio2017中编译而没有错误或警告的测试代码:structfoo{foo():reference(reference){}int&reference;};intmain(){foofooOb;}更新:我看到这里有一个2009年的类似问题。其他编译器在2017年的行为是否相同,还是VS2017问题?如果他们这样做了,这有点向我暗示这是合法的C++,但我不明白它怎么可能。 最佳答案

c++ - 初始化模板内部类的静态成员

我对在类模板中初始化静态成员所需的语法有疑问。这是代码(我尽量减少它):templatestructA{templatestructB{staticT1b;};Bb;typedefBBT;Tval(){returnb.b;}};templateTA::BT::b;structD{D():d(0){}intd;};intmain(){Aa;returna.val().d;}使用g++,我得到的错误是:error:toofewtemplate-parameter-lists关于如何初始化b有什么想法吗?请注意,我想保留typedef,因为在我的真实代码中,B比这复杂得多。

c++ - C++ 静态初始化在同一个回溯中出现两次是否正常?

我正在尝试调试使用GCC编译的C++程序,该程序在启动时卡住。GCCmutex保护函数的静态局部变量,似乎等待获取这样的锁是它卡住的原因。这是如何发生的相当令人困惑。第一个模块A的静态初始化发生(GCC调用的__static_init函数在回溯中可见),它调用具有静态局部变量的函数Foo()。静态局部变量是构造函数调用了好几层函数的对象,然后回溯突然有几个??的,然后它在第二个模块B的静态初始化中(__static函数再次出现),然后调用Foo(),但由于Foo()从未在第一次返回时本地静态变量上的互斥量仍然设置,因此它锁定。一个静态初始化如何触发另一个?我的第一个理论是共享库——模块

c++ - 在 C 中初始化一个 char 数组。哪种方式更好?

以下是初始化char数组的两种方式:charcharArray1[]="foo";charcharArray2[]={'f','o','o','\0'};如果两者等同,人们会希望每个人都使用上面的第一个选项(因为它需要更少的击键)。但是我看到过作者总是不厌其烦地使用第二种方法的代码。我的猜测是,在第一种情况下,字符串“foo”存储在数据段中,并在运行时复制到数组中,而在第二种情况中,字符存储在代码段中,并在运行时复制到数组中.出于某种原因,作者对数据段中的任何内容都过敏。编辑:假设数组声明为局部函数。问题:我的推理是否正确?您喜欢哪种风格?为什么? 最佳答案

c++ - 如何初始化数组并将指针传递给派生的基构造函数?

完全重写了问题。请仔细阅读请注意不要让您感到困惑:基本构造函数需要指向常量数组的指针。它本身不存储指针,它存储数据!我有以下代码:classBase{public:Base(int*);//addedthistoexplainwhyIneedinheritancevirtualvoidabstractMethod()=0;};Base::Base(constint*array){//justforexamplecout我想对派生类的用户隐藏Base(int*)构造函数。为此,我需要为该数组提供默认值。问题是当我像这样使用初始化列表时:Derived::Derived():Base(ne

c++ - 模板基类初始化

在visualc++中接受以下代码时,g++将生成错误:“类Derived没有任何字段名称Base”哪个符合标准?templateclassBase{public:Base(){};};templateclassDerived:publicBase{public:Derived():Base(){}};顺便说一句:两者都接受Derived():Base(){}所以同时,我会关注gcc 最佳答案 MSVC++不正确。Base是模板,不是类型。请注意,在通常情况下,Base在Derived的范围内查找,这意味着它将首先找到继承自Base